package com.shujia.wyh.day20;

import java.util.ArrayList;

/*
        泛型的高级用法：
                泛型通配符<?>
                任意类型，如果没有明确，那么就是Object以及任意的Java类了
                <? extends E>
                向下限定，E及其子类
                <? super E>
                向上限定，E及其父类

 */
public class GenericDemo3 {
    public static void main(String[] args) {
        ArrayList<Animal> list1 = new ArrayList<>();
        ArrayList<Dog> list2 = new ArrayList<>();
        ArrayList<Cat> list3 = new ArrayList<>();

        //泛型通配符<?>
        //任意的引用数据类型，如果左边定义的时候没有明确，右边new的时候必须给出明确的类型，否则就是Object类型或者任意引用数据类型
        ArrayList<?> list4 = new ArrayList<>();
        ArrayList<?> list5 = new ArrayList<Animal>();
        ArrayList<?> list6 = new ArrayList<Dog>();
        ArrayList<?> list7 = new ArrayList<Cat>();

        //<? extends E>向下限定，E及其子类
        ArrayList<? extends Animal> list8 = new ArrayList<Animal>();
        ArrayList<? extends Animal> list9 = new ArrayList<Dog>();
        ArrayList<? extends Animal> list10 = new ArrayList<Cat>();
//        ArrayList<? extends Animal> list11 = new ArrayList<Object>();

        //<? super E> 向上限定，E及其父类
        ArrayList<? super Animal> list12 = new ArrayList<Animal>();
        ArrayList<? super Animal> list13 = new ArrayList<Object>();
//        ArrayList<? super Animal> list14 = new ArrayList<Cat>();
//        ArrayList<? super Animal> list15 = new ArrayList<Dog>();
    }
}
